package com.ysxsoft.wdg.net;

import com.ysxsoft.wdg.bean.AddressBean;
import com.ysxsoft.wdg.bean.BannerBean;
import com.ysxsoft.wdg.bean.BaseBean;
import com.ysxsoft.wdg.bean.DiscussBean;
import com.ysxsoft.wdg.bean.DiscussBean2;
import com.ysxsoft.wdg.bean.ZyOrderBean;
import com.ysxsoft.wdg.bean.response.ShareCodeResponse;
import com.ysxsoft.wdg.bean.st.StGoodsBean;
import com.ysxsoft.wdg.bean.zy.GoodsRulesBean;
import com.ysxsoft.wdg.bean.MyJfBean;
import com.ysxsoft.wdg.bean.zy.RuleBean;
import com.ysxsoft.wdg.bean.cart.ShopcartBean;
import com.ysxsoft.wdg.bean.cart.ShopcartConfirmBean;
import com.ysxsoft.wdg.bean.st.StShopDetailBean;
import com.ysxsoft.wdg.bean.UserInfoBean;
import com.ysxsoft.wdg.bean.zy.GoodsBean;
import com.ysxsoft.wdg.bean.zy.ZyConfirmBean;
import com.ysxsoft.wdg.bean.zy.CreateIdBean;
import com.ysxsoft.wdg.bean.zy.ZyGoodsBean;
import com.ysxsoft.wdg.bean.st.CompanyBean;
import com.ysxsoft.wdg.bean.st.StHomeBean;
import com.ysxsoft.wdg.bean.home.HomeBannerBean;
import com.ysxsoft.wdg.bean.home.InviteBean;
import com.ysxsoft.wdg.bean.zy.ZyOrderDetailBean;
import com.ysxsoft.wdg.pay.WxPayBean;
import com.ysxsoft.wdg.upversion.VersionBean;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.PartMap;


public interface ApiService {

    /**
     * 上传图片
     */
    @Multipart
    @POST("index/index/upload")
    Observable<BaseBean<UserInfoBean>> commitPic(@PartMap Map<String, RequestBody> map, @Part MultipartBody.Part icon);

    /**
     * @param mobile   手机号
     * @param code     验证码
     * @param invicode 邀请码
     * @param province 省
     * @param city     市
     * @param county   区
     * @return
     */
    @FormUrlEncoded
    @POST("index/login/register")
    Observable<BaseBean> postRegister(@Field("mobile") String mobile,
                                      @Field("code") String code,
                                      @Field("invicode") String invicode,
                                      @Field("password") String password,
                                      @Field("province") String province,
                                      @Field("city") String city,
                                      @Field("county") String county);

    /**
     * 获取验证码
     *
     * @param mobile 手机号
     * @return
     */
    @FormUrlEncoded
    @POST("index/login/sendCode")
    Observable<BaseBean<String>> getMsmCode(@Field("mobile") String mobile);

    /**
     * 登录
     */
    @FormUrlEncoded
    @POST("index/login/login")
    Observable<BaseBean<UserInfoBean>> postLogin(@Field("username") String username,
                                                 @Field("password") String password, @Field("a_cid") String a_cid);

    /**
     * 忘记密码（修改密码）
     */
    @FormUrlEncoded
    @POST("index/login/forgetpass")
    Observable<BaseBean> modifyPsw(@Field("mobile") String mobile,
                                   @Field("code") String code,
                                   @Field("pass") String pass,
                                   @Field("repass") String repass);

    /**
     * 热门城市
     */
    @GET("index/index/city")
    Observable<BaseBean<List<BannerBean>>> getHotCity();


    /**
     * 个人信息
     *
     * @param uid
     * @return
     */
    @FormUrlEncoded
    @POST("index/login/center")
    Observable<BaseBean<UserInfoBean>> getUserInfo(@Field("uid") String uid);


    /**
     * 修改头像，昵称，性别
     *
     * @param uid
     * @param avatar   头像id
     * @param nickname 昵称
     * @param sex      性别 0男1女
     * @return
     */
    @FormUrlEncoded
    @POST("index/login/avatar")
    Observable<BaseBean> modifyPersonInfo(@Field("uid") String uid,
                                          @Field("avatar") String avatar,
                                          @Field("nickname") String nickname,
                                          @Field("sex") String sex,
                                          @Field("province") String province,
                                          @Field("city") String city,
                                          @Field("county") String county);

    /**
     * 账号与安全
     *
     * @param uid
     * @return
     */
    @FormUrlEncoded
    @POST("index/login/message")
    Observable<BaseBean<UserInfoBean>> getAccountInfo(@Field("uid") String uid);

    /**
     * 修改手机号
     *
     * @param uid
     * @return
     */
    @FormUrlEncoded
    @POST("index/login/editphone")
    Observable<BaseBean> modifyPhone(@Field("uid") String uid,
                                     @Field("code") String code,
                                     @Field("mobile") String mobile);

    /**
     * 账号绑定
     *
     * @param uid
     * @return
     */
    @FormUrlEncoded
    @POST("index/login/bind")
    Observable<BaseBean> bindAli(@Field("uid") String uid,
                                 @Field("name") String name,
                                 @Field("alicode") String alicode,
                                 @Field("code") String code);


    /**
     * 意见反馈
     *
     * @param uid
     * @return
     */
    @FormUrlEncoded
    @POST("index/login/feedback")
    Observable<BaseBean> postYjfk(@Field("uid") String uid,
                                  @Field("content") String content);

    /**
     * 版本
     */
    @POST("index/login/version")
    Observable<BaseBean<VersionBean>> getVersion();

    /**
     * 服务条款
     */
    @POST("index/login/serverOrder")
    Observable<BaseBean<String>> getFwlk();

    /**
     * 我的客服
     */
    @GET("index/login/server")
    Observable<BaseBean<UserInfoBean>> getKf();

    /**
     * 首页轮播图
     */
    @GET("index/index/banner")
    Observable<BaseBean<HomeBannerBean>> getHomeBanner();


    /**
     * 收货地址
     */
    @FormUrlEncoded
    @POST("index/own/address")
    Observable<BaseBean<List<AddressBean>>> getAddressList(@Field("uid") String uid);

    /**
     * 添加收货地址
     */
    @FormUrlEncoded
    @POST("index/own/addaddress")
    Observable<BaseBean<String>> addAddress(@Field("uid") String uid,
                                            @Field("province") String province,
                                            @Field("city") String city,
                                            @Field("county") String county,
                                            @Field("address") String address,
                                            @Field("name") String name,
                                            @Field("phone") String phone,
                                            @Field("status") String status);//1默认

    /**
     * 修改地址
     */
    @FormUrlEncoded
    @POST("index/own/editAddress")
    Observable<BaseBean<String>> editAddress(@Field("aid") String aid,//地址id
                                             @Field("province") String province,
                                             @Field("city") String city,
                                             @Field("county") String county,
                                             @Field("address") String address,
                                             @Field("name") String name,
                                             @Field("phone") String phone,
                                             @Field("status") String status);//1默认

    /**
     * 删除地址
     */
    @FormUrlEncoded
    @POST("index/own/delAddress")
    Observable<BaseBean> delAddress(@Field("aid") String aid);//地址id

    /**
     * 设置默认地址
     */
    @FormUrlEncoded
    @POST("index/own/addressStatus")
    Observable<BaseBean> addressStatus(@Field("aid") String aid);//地址id

    /**
     * 自营商城   轮播
     */
    @GET("index/own/banner")
    Observable<BaseBean<List<BannerBean>>> getZyBanner();

    /**
     * 自营商城   热卖品
     */
    @FormUrlEncoded
    @POST("index/own/hot")
    Observable<BaseBean<List<GoodsBean>>> getZyHotList(@Field("page") String page,
                                                       @Field("cate") String cate,
                                                       @Field("keyword") String keyword,
                                                       @Field("xu") String xu,// 	1销量2最新3到手价倒序4到手价正序
                                                       @Field("uid") String uid);

    /**
     * 自营商城  商品详情
     */
    @FormUrlEncoded
    @POST("index/own/goodsdetail")
    Observable<BaseBean<ZyGoodsBean>> getZyGoodsdetail(@Field("uid") String uid,
                                                       @Field("goodsid") String goodsid);


    /**
     * 自营商城  评价列表
     */
    @FormUrlEncoded
    @POST("index/own/discuss")
    Observable<BaseBean<List<DiscussBean2>>> getZyDiscussList(@Field("productid") String productid,
                                                              @Field("page") String page);
    /**
     * 实体商城  评价列表
     */
    @FormUrlEncoded
    @POST("index/own/discuss")
    Observable<BaseBean<List<DiscussBean2>>> getZyDiscussList2(@Field("productid") String productid,
                                                              @Field("page") String page,@Field("type") String type);


    /**
     * 自营商城  商品收藏
     */
    @FormUrlEncoded
    @POST("index/own/productSou")
    Observable<BaseBean> colZyGoods(@Field("productid") String productid,
                                    @Field("uid") String uid);

    /**
     * 自营商城  商品规格
     */
    @FormUrlEncoded
    @POST("index/own/goodsrule")
    Observable<BaseBean<GoodsRulesBean>> getZyRules(@Field("goodsid") String goodsid);

    /**
     * 自营商城  选择规格
     */
    @FormUrlEncoded
    @POST("index/own/chooseRule")
    Observable<BaseBean<GoodsBean>> chooseRule(@Field("productid") String productid,
                                               @Field("ruleid") String ruleid);

    /**
     * 自营商城  加入购物车
     */
    @FormUrlEncoded
    @POST("index/own/addcar")
    Observable<BaseBean> addCart(@Field("uid") String uid,
                                 @Field("product_rule_id") String product_rule_id,
                                 @Field("num") String num);

    /**
     * 自营商城  确认订单
     */
    @FormUrlEncoded
    @POST("index/own/sureOrder")
    Observable<BaseBean<ZyConfirmBean>> sureZyOrder(@Field("uid") String uid,
                                                    @Field("product_rule_id") String product_rule_id,
                                                    @Field("num") String num);

    /**
     * 自营商城  生成订单
     */
    @FormUrlEncoded
    @POST("index/own/orderAdd")
    Observable<BaseBean<CreateIdBean>> orderAdd(@Field("uid") String uid,
                                                @Field("addressid") String addressid,
                                                @Field("account") String account,
                                                @Field("product_rule_id") String product_rule_id,
                                                @Field("num") String num);

    /**
     * 自营商城  余额支付
     */
    @FormUrlEncoded
    @POST("index/yu/pay_own")
    Observable<BaseBean> payZyYue(@Field("uid") String uid,
                                  @Field("orderid") String orderid,
                                  @Field("total") String total,
                                  @Field("type") String type);

    /**
     * 自营商城  微信支付
     */
    @FormUrlEncoded
    @POST("index/wxpay/wx_pay_own")
    Observable<BaseBean<WxPayBean>> payZyWx(@Field("uid") String uid,
                                            @Field("orderid") String orderid,
                                            @Field("total") String total,
                                            @Field("type") String type);// 	是否积分抵现，0否1是

    /**
     * 自营商城  支付宝支付
     */
    @FormUrlEncoded
    @POST("index/alipay/ali_pay_own")
    Observable<BaseBean<String>> payZyZfb(@Field("uid") String uid,
                                          @Field("orderid") String orderid,
                                          @Field("total") String total,
                                          @Field("type") String type);// 	是否积分抵现，0否1是


    /**
     * 自营商城  首页分类
     */
    @GET("index/own/category")
    Observable<BaseBean<List<BannerBean>>> getZyCate();

    /**
     * 自营商城  热门分类
     */
    @GET("index/own/hotcate")
    Observable<BaseBean<List<BannerBean>>> getZyHotCate();


    /**
     * 搜索历史记录
     *
     * @param uid
     * @param type 1首页2热门3自营4实体
     * @return
     */
    @FormUrlEncoded
    @POST("index/own/history")
    Observable<BaseBean<List<BannerBean>>> getHisSearch(@Field("uid") String uid,
                                                        @Field("type") String type);

    /**
     * 清空历史记录
     *
     * @param uid
     * @param type 1首页2热门3自营4实体
     * @return
     */
    @FormUrlEncoded
    @POST("index/own/delhistory")
    Observable<BaseBean> clearHisSearch(@Field("uid") String uid,
                                        @Field("type") String type);


    /**
     * 自营商城  分类商品列表
     */
    @FormUrlEncoded
    @POST("index/own/subGoods")
    Observable<BaseBean<List<GoodsBean>>> getZyCateList(@Field("page") String page,
                                                        @Field("categoryid") String categoryid,
                                                        @Field("xu") String xu);

    /**
     * 自营商城  分类商品列表
     */
    @FormUrlEncoded
    @POST("index/own/maingoods")
    Observable<BaseBean<List<GoodsBean>>> getZyCateListByCategory(@Field("page") String page,
                                                        @Field("id") String id,
                                                        @Field("xu") String xu);

    /**
     * 自营商城  搜索页列表
     */
    @FormUrlEncoded
    @POST("index/own/search")
    Observable<BaseBean<List<GoodsBean>>> getZySearchList(@Field("page") String page,
                                                          @Field("keyword") String keyword,
                                                          @Field("xu") String xu,
                                                          @Field("uid") String uid);

    /**
     * 自营商城  分类页
     */
    @GET("index/own/fenlei")
    Observable<BaseBean<List<RuleBean>>> getZyFenlei();

    /**
     * 实体商城  分类
     */
    @GET("index/company/cate")
    Observable<BaseBean<List<BannerBean>>> getStCate();

    /**
     * 实体商城  首页
     */
    @FormUrlEncoded
    @POST("index/company/index")
    Observable<BaseBean<StHomeBean>> getStHome(@Field("address") String address,
                                                @Field("lng") String lng,
                                                @Field("lat") String lat);

    /**
     * 实体商城  商铺详情
     */
    @FormUrlEncoded
    @POST("index/company/xcompanyDetail")
    Observable<BaseBean<StShopDetailBean>> getStShopDetail(@Field("companyid") String companyid,
                                                           @Field("uid") String uid);

    /**
     * 实体商城  商品详情
     */
    @FormUrlEncoded
    @POST("index/company/goodsDetail")
    Observable<BaseBean<StGoodsBean>> getStGoodsDetail(@Field("productid") String productid);

    /**
     * 实体商城  分类下的商铺
     *
     * @param page
     * @param categoryid
     * @param address
     * @param lng
     * @param lat
     * @param type       按距离升序降序type=1/2
     * @param price      价格升序降序1/2
     * @param grade      评分升序降序1/2
     * @return
     */
    @FormUrlEncoded
    @POST("index/company/getCateCompany")
    Observable<BaseBean<List<CompanyBean>>> getStCateList(@Field("page") String page,
                                                          @Field("categoryid") String categoryid,
                                                          @Field("address") String address,
                                                          @Field("lng") String lng,
                                                          @Field("lat") String lat,
                                                          @Field("type") String type,//按距离升序降序type=1/2
                                                          @Field("price") String price,//价格升序降序1/2
                                                          @Field("grade") String grade);//评分升序降序1/2

    /**
     * 实体商城  附近商家
     *
     * @param page
     * @param address
     * @param lng
     * @param lat
     * @param xu      1距离正序2倒序3价格正序4倒序5评分倒序6正序
     * @return
     */
    @FormUrlEncoded
    @POST("index/index/fujin")
    Observable<BaseBean<List<CompanyBean>>> getStFjList(@Field("page") String page,
                                                        @Field("address") String address,
                                                        @Field("lng") String lng,
                                                        @Field("lat") String lat,
                                                        @Field("xu") String xu);//	1距离正序2倒序3价格正序4倒序5评分倒序6正序

    /**
     * 实体商城  搜索
     *
     * @param page
     * @param address
     * @param lng
     * @param lat
     * @param xu      1距离正序2倒序3价格正序4倒序5评分倒序6正序
     * @return
     */
    @FormUrlEncoded
    @POST("index/company/companys")
    Observable<BaseBean<List<CompanyBean>>> getStSearchList(@Field("uid") String uid,
                                                            @Field("keyword") String keyword,
                                                            @Field("page") String page,
                                                            @Field("address") String address,
                                                            @Field("lng") String lng,
                                                            @Field("lat") String lat,
                                                            @Field("xu") String xu);//	1距离正序2倒序3价格正序4倒序5评分倒序6正序

    /**
     * 实体商城  生成订单orderID
     */
    @FormUrlEncoded
    @POST("index/company/orderAdd")
    Observable<BaseBean<CreateIdBean>> createStOrder(@Field("uid") String uid,
                                                     @Field("account") String account,
                                                     @Field("product_rule_id") String product_rule_id,
                                                     @Field("num") String num,
                                                     @Field("companyid") String companyid);

    /**
     * 实体商城  余额支付
     */
    @FormUrlEncoded
    @POST("index/company/pay")
    Observable<BaseBean> payStYuE(@Field("uid") String uid,
                                  @Field("orderid") String orderid,
                                  @Field("account") String total,
                                  @Field("type") String type,
                                  @Field("quanid") String quanid
    );

    /**
     * 实体商城  支付宝支付
     */
    @FormUrlEncoded
    @POST("index/company/pay")
    Observable<BaseBean<String>> payStZfb(@Field("uid") String uid,
                                          @Field("orderid") String orderid,
                                          @Field("account") String total,
                                          @Field("type") String type,
                                          @Field("quanid") String quanid);

    /**
     * 实体商城  支付宝支付
     */
    @FormUrlEncoded
    @POST("index/company/pay")
    Observable<BaseBean<WxPayBean>> payStWx(@Field("uid") String uid,
                                            @Field("orderid") String orderid,
                                            @Field("account") String total,
                                            @Field("type") String type,
                                            @Field("quanid") String quanid);


    /**
     * 购物车列表
     */
    @FormUrlEncoded
    @POST("index/own/car")
    Observable<BaseBean<List<ShopcartBean>>> getCartList(@Field("uid") String uid);

    /**
     * 加减购物车
     */
    @FormUrlEncoded
    @POST("index/own/addnum")
    Observable<BaseBean> editCartNum(@Field("uid") String uid,
                                     @Field("cardid") String cardid,
                                     @Field("num") String num);

    /**
     * 删除购物车
     */
    @FormUrlEncoded
    @POST("index/own/delcar")
    Observable<BaseBean> delCart(@Field("uid") String uid,
                                 @Field("cardid") String cardid);

    /**
     * 购物车  确认订单
     */
    @FormUrlEncoded
    @POST("index/own/carsureorder")
    Observable<BaseBean<ShopcartConfirmBean>> sureCartOrder(@Field("uid") String uid,
                                                            @Field("cardid") String cardid);

    /**
     * 购物车  生成订单orderId
     */
    @FormUrlEncoded
    @POST("index/own/carorderadd")
    Observable<BaseBean<CreateIdBean>> createCartOrder(@Field("uid") String uid,
                                                       @Field("cardid") String cardid,
                                                       @Field("addressid") String addressid,
                                                       @Field("account") String account,
                                                       @Field("yun") String yun);

    /**
     * 我的积分
     */
    @FormUrlEncoded
    @POST("index/score/index")
    Observable<BaseBean<MyJfBean>> getJfInfo(@Field("uid") String uid);

    /**
     * 积分商品详情
     */
    @FormUrlEncoded
    @POST("index/score/goods")
    Observable<BaseBean<MyJfBean.ShopBean>> getJfGoodsDetail(@Field("goodsid") String goodsid);

    /**
     * 签到
     */
    @FormUrlEncoded
    @POST("index/score/sign")
    Observable<BaseBean> signUp(@Field("uid") String uid);

    /**
     * 分享邀请页面
     */
    @FormUrlEncoded
    @POST("index/score/invite")
    Observable<BaseBean<InviteBean>> getInviteList(@Field("uid") String uid, @Field("page") String page);

    /**
     * 获取邀请码
     */
    @FormUrlEncoded
    @POST("index/login/inivCode")
    Observable<BaseBean<ShareCodeResponse>> getInviteCode(@Field("uid") String uid);


    /**
     * 我的订单----自营商城
     */
    @FormUrlEncoded
    @POST("index/own/myOrder")
    Observable<BaseBean<List<ZyOrderBean>>> getZyOrderList(@Field("uid") String uid,
                                                           @Field("page") String page,
                                                           @Field("type") String type,
                                                           @Field("style") String style);

    ///////////////////////////////////////////////////////////////////////////
    // create by Sincerly on 2018-11-14 13:54:00
    //////////////////////////////////////////////////////////////////////////

    //本appurl     http://wdg.sanzhima.cn/oa/public/index.php/

    //http://wdg.sanzhima.cn/woniu/public/index.php/index/highreturn/goodsLists 大众联成  主页商品搜索

    /**
     * 我的订单----自营商城
     */
    @FormUrlEncoded
    @POST("index/own/orderDetail")
    Observable<BaseBean<ZyOrderDetailBean>> getZyOrderDetail(@Field("uid") String uid,
                                                             @Field("orderid") String orderid);

//    /**
//     * 获取系统消息
//     */
//    @FormUrlEncoded
//    @POST("index/own/orderDetail")
//    Observable<BaseBean<ZyOrderDetailBean>> getZyOrderDetail(@Field("uid") String uid,
//                                                             @Field("orderid") String orderid);
}